package 死锁的理解;

/**
 * @作者:侯国威
 * @时间: 2020/4/11/20:21
 * @邮箱:1045077189@qq.com 死锁的理解：
 * 不同死锁分别占用对方需要的同步资源不放弃，都在等待对方放弃自身需要的资源。
 * 出现死锁的时候，不会出现异常，只是线程出现阻塞状态，无法继续。
 */
public class index {
    public static void main(String[] args) {
        StringBuilder s1 = new StringBuilder();
        StringBuilder s2 = new StringBuilder();

        new Thread() {
            @Override
            public void run() {
                synchronized (s1) {
                    s1.append("1");
                    s2.append("a");
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                synchronized (s2) {
                    s1.append("2");
                    s2.append("b");

                    System.out.println(s1);
                    System.out.println(s2);
                }
            }
        }.start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (s2) {
                    s1.append("3");
                    s2.append("c");

                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                synchronized (s1) {
                    s2.append("d");
                    s1.append("4");
                    System.out.println(s1);
                    System.out.println(s2);
                }
            }
        }).start();
    }
}
